STM32F767 SPI interfaced to ICM20948 |
您所在的位置:网站首页 › stm32 icm20948 › STM32F767 SPI interfaced to ICM20948 |
STM32F767 SPI interfaced to ICM20948
ChibiOS public support forum for topics related to the STMicroelectronics STM32 family of micro-controllers.
Moderators: RoccoMarco, barthess Post Reply Print view 9 posts • Page 1 of 1 prashanth206 Posts: 5 Joined: Sun Dec 09, 2018 7:20 pm STM32F767 SPI interfaced to ICM20948 QuotePostby prashanth206 » Tue Aug 13, 2019 11:48 am Hello,Warm greetings, I have been trying to use the SPI hal driver to interact with ICM20948 interfaced to SPI1 in custom board that i have made.Following is the SPI configuration which i am using,Code: Select all static const SPIConfig spid1_cfg = { false, //circular mode NULL, //complete callback SPI_SOCKET_1_CS_PORT, SPI_SOCKET_1_CS_PIN, SPI_CR1_CPHA | SPI_CR1_CPOL | SPI_CR1_BR_1 | SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI};I am trying to use the following,1. Configure GPIO,Code: Select all /* * SPI1 I/O pins setup. */ palSetPad(SPI_SOCKET_1_CS_PORT, SPI_SOCKET_1_CS_PIN); palSetPadMode(SPI_SOCKET_1_CS_PORT, SPI_SOCKET_1_CS_PIN, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_LOWEST); /* CS */ palSetPadMode(SPI_SOCKET_1_GPIO, SPI_SOCKET_1_SCK, PAL_MODE_ALTERNATE(SPI_SOCKET_1_AF) | PAL_STM32_OSPEED_HIGHEST); /* SCK. */ palSetPadMode(SPI_SOCKET_1_GPIO, SPI_SOCKET_1_MISO, PAL_MODE_ALTERNATE(SPI_SOCKET_1_AF)); /* MISO. */ palSetPadMode(SPI_SOCKET_1_GPIO, SPI_SOCKET_1_MOSI, PAL_MODE_ALTERNATE(SPI_SOCKET_1_AF) | PAL_STM32_OSPEED_HIGHEST); /* MOSI. */2. spiStart(SPID, &spid1_cfg);3. read one byte WHOAMI from the ICM20948Code: Select all /* Slave selection and data send.*/ spiSelect(SPID); spiExchange(SPID, len, (void *)buf_tx, (void *)buf_rx); spiUnselect(SPID);On debugging, I find the call reaches spiStartExchangeI then osalThreadSuspendS suspends and thread is never wokenup, probably by an interrupt.Kindly let me know what could i be missing or not configured. I had enable debugging and there is no issues there. Top Giovanni Site Admin Posts: 14466 Joined: Wed May 27, 2009 8:48 am Location: Salerno, Italy Has thanked: 1081 times Been thanked: 924 times Contact: Contact Giovanni ICQ Website Re: STM32F767 SPI interfaced to ICM20948 QuotePostby Giovanni » Tue Aug 13, 2019 12:05 pm Hi,The thread is woked by the RX DMA interrupt so possible causes:- Invalid DMA state before operation.- DMA channel conflict.- DMA error caused by invalid address.Pins configuration should not cause this, SPI would function regardless.If it is a Cortex-M0 then also make sure to use GCC 5.4.1 or below, there is a bug in newer versions.Try putting a breakpoint in the DMA SPI ISR, that could give an hint, make sure to compiler using -O0 in the makefile.Giovanni Top prashanth206 Posts: 5 Joined: Sun Dec 09, 2018 7:20 pm Re: STM32F767 SPI interfaced to ICM20948 QuotePostby prashanth206 » Tue Aug 13, 2019 4:04 pm Hi,Greetings, I am using the mcuconf as in the stm32f7 demo projectCode: Select all /* * SPI driver system settings. */#define STM32_SPI_USE_SPI1 TRUE#define STM32_SPI_USE_SPI2 TRUE#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)- Invalid DMA state before operation.Could you please suggest me how it can be checked. - DMA channel conflict.Verified DMA stream is configured only for the specific device.- DMA error caused by invalid address.The board config is selected properly for STM32F767xxI was using GCC 7 and now moved to GCC 5.4.1, just to avoid any uncertainties.As recommended removed any optimization and tried to put break point at SPI DMA RX ISR in hal_lld_spi but interrupt is still not triggered.Guru Prashanth Sridhar Top Giovanni Site Admin Posts: 14466 Joined: Wed May 27, 2009 8:48 am Location: Salerno, Italy Has thanked: 1081 times Been thanked: 924 times Contact: Contact Giovanni ICQ Website Re: STM32F767 SPI interfaced to ICM20948 QuotePostby Giovanni » Tue Aug 13, 2019 4:11 pm Are those DMA channels used by some other active driver? that would create a conflict.Also, make sure to enable checks, assertions and state checker in chconf.h, it halts the system in case of an error detection. After halt look at the stack trace to understand where it was triggered.Giovanni Top prashanth206 Posts: 5 Joined: Sun Dec 09, 2018 7:20 pm Re: STM32F767 SPI interfaced to ICM20948 QuotePostby prashanth206 » Tue Aug 13, 2019 5:29 pm Hi,Greetings, the only other peripheral i have enabled is I2C using DMA.I had also had enabled checks, assertions and state checker in chconf.h, no system halt due to assert is observed.When interrupted system is at Idle thread and waits for interrupt.Do i need to do any configuration of function call specific to DMA? I see that the DMA is managed by SPIV2 in case of stm32f767.Best regards,Guru Prashanth Sridhar Top Giovanni Site Admin Posts: 14466 Joined: Wed May 27, 2009 8:48 am Location: Salerno, Italy Has thanked: 1081 times Been thanked: 924 times Contact: Contact Giovanni ICQ Website Re: STM32F767 SPI interfaced to ICM20948 QuotePostby Giovanni » Tue Aug 13, 2019 7:32 pm Could you try the F7 test application? If it works then it is something specific in your setup else it could be a bug (unlikely).Giovanni Top mikeprotts Posts: 166 Joined: Wed Jan 09, 2019 12:37 pm Has thanked: 19 times Been thanked: 31 times Re: STM32F767 SPI interfaced to ICM20948 QuotePostby mikeprotts » Tue Aug 13, 2019 10:22 pm It's worth double checking the config, I had to set SPI_CR2 for my code when I moved from STM32F407 to STM32F767 code:SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2 | SPI_CR2_DS_3What code are you expecting to run from the data received from spiExchange? Should there be a callback?Have you tried with spiPolledExchange, which I found to be easier to debug. Once everything works that way, swapping to a callback is not too difficult.Mike Top prashanth206 Posts: 5 Joined: Sun Dec 09, 2018 7:20 pm Re: STM32F767 SPI interfaced to ICM20948 QuotePostby prashanth206 » Thu Aug 15, 2019 11:31 am Hello,Greetings, I think i'm running into some serious issues here. I figured this out when trying to run the SPI test application for my board.I had designed the custom hardware with STM32F767VIT6 with 100 pin package, its different from the general STM32F767xx and more similar to STM32F765xx.As descibed in secction STM32F765xx, STM32F767xx, STM32F768Ax and STM32F769xx features and peripheral counts in document below.https://www.st.com/resource/en/datasheet/stm32f767vi.pdfCould you let me know if it still should work? or suggest me a solution or workaround.I find no specific option for this in stm32_registry.hBest regards,Guru Prashanth Sridhar Top mikeprotts Posts: 166 Joined: Wed Jan 09, 2019 12:37 pm Has thanked: 19 times Been thanked: 31 times Re: STM32F767 SPI interfaced to ICM20948 QuotePostby mikeprotts » Thu Aug 15, 2019 3:25 pm I've used the STM32F767ZIT6 144 pin chip on the Nucleo-144 board and the STM32F767VIT6 100 pin chip on a custom board. There's no special code for any difference other than the board files (in os/hal/boards/XXX).I've disabled a lot of pins as I'm not using USB or SD card. I use Ethernet for comms (LAN8710A on custom board, LAN8742A on Nucleo). I have serial lines to GPS and Raspberry Pi, and use GPIO from Pi for programming.Mike Top Post Reply Print view 9 posts • Page 1 of 1Return to “STM32 Support” Jump to ChibiOS General Releases Development and Feedback Open Discussion about the Commercial Options Bug Reports Small Change Requests User Projects Books and Documentation ChibiOS Sub-Projects ChibiOS/RT ChibiOS/NIL ChibiOS/HAL ChibiOS/EX ChibiStudio Support Section General Support STM32 Support SPC56x Support AVR Support Community Supported Tiva Support RX62N Support RL78 Support nRF51 Support Kinetis Support ESP32 Support 16FX Support LCD Driver and Graphic Framework iNemo Design Challenge VIPER Places Safer C obsolete Currently Unsupported MIPS32 Support LPC Support AT91SAM7x Support Consultant Services Who is onlineUsers browsing this forum: No registered users and 4 guests |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |